package ar.com.hakasoft

import java.util.Calendar

import ar.com.hakasoft.entities.Articulo
import ar.com.hakasoft.entities.Cliente
import ar.com.hakasoft.entities.Dietetica
import ar.com.hakasoft.entities.Vendedor


class EstadisticasController extends LoginController {

	def reportesService
	
	def beforeInterceptor = [action:this.&checkUser,except:[]]
	
    def index = { 
		def anioActual = new Date().year + 1900
		def anioComienzo = 2011 //hardcode desde cuando comenzo el sistema
		def listAnios = []
		
		for (int i = anioComienzo; i <  anioActual  +1 ; i++){
			listAnios.add(i)
		}
		def mesActual = Calendar.instance.get(Calendar.MONTH).toLong() + 1
		def vendedoresList = Vendedor.list().sort{it.nombre}
		def dieteticasList = Dietetica.list().sort{it.nombre}
		def clientesList = Cliente.list().sort{it.nombre}
		[listAnios: listAnios, mesActual:mesActual,anioActual:anioActual,vendedoresList:vendedoresList,dieteticasList:dieteticasList, clientesList:clientesList]
	}
	
	def generarEstadistica = {
		def vendedor
		def dietetica
		def cliente
		def anio = params.anioReporte
		def mes = params.mesReporte
		
		if (params?.get("vendedor.id")!=null && !params?.get("vendedor.id").equals("null")){
			vendedor = params?.get("vendedor.id").toLong()
		}
		if (params?.get("dietetica.id")!=null && !params?.get("dietetica.id").equals("null")){
			dietetica = params?.get("dietetica.id").toLong()
		}
		if (params?.get("cliente.id")!=null && !params?.get("cliente.id").equals("null")){
			cliente = params?.get("cliente.id").toLong()
		}
		
		if (anio && anio.isInteger()){
			anio = anio.toInteger()
		}
		if (mes && mes.isInteger()){
			mes = mes.toInteger() - 1
		}
		
		def estadisticasMap = reportesService.getEstadistica(vendedor, dietetica, cliente, anio, mes)
		estadisticasMap["totalesPersona"] = [:]
		estadisticasMap["totalesProducto"] = [:]
		estadisticasMap["totalesPersona"] += getTotalesPersona(estadisticasMap["estadisticas"])
		estadisticasMap["totalesProducto"] += getTotalesProducto(estadisticasMap["estadisticas"])
		
		session.setAttribute("reporteParams", params)
		render(template: "/templates/estadisticaTable", model: [estadisticasMap:estadisticasMap])
	}
	
	def getTotalesPersona(facturas){
		def mapaTotales = [:]
		if (facturas){
			facturas.each { factura ->
				def persona = factura.vendedor?:factura.dietetica?:factura.cliente
				if (!mapaTotales["$persona"]){
					mapaTotales["$persona"] = 0
				}
				mapaTotales["$persona"] += factura.precioTotal
			}
		}
		return mapaTotales
	}
	
	def getTotalesProducto(facturas){
		def mapaTotales = [:]
		if (facturas){
			Articulo.list().each {
				mapaTotales["${it.descripcion}"] = 0
			}
			facturas.each { factura ->
				factura.itemFactura.each { item ->
					def descripcion = item.articulo.descripcion
					mapaTotales["$descripcion"] += item.cantidad
				}
			}
		}
		return mapaTotales
	}
	
}